Displaying and Printing Bitmaps
Description
Xbasic offers a large number of functions that will create, draw, display, and print bitmaps.
The General Process
The general process when working with bitmaps is to:
Optionally, read graphical data into a blob variable.
Create a bitmap in memory, either from graphical data or by using various drawing functions.
Optionally, modify the bitmap with various drawing functions.
Optionally, save the bitmap.
Display the bitmap on a form or Xdialog, or
Send the bitmap to a printer.
Reading Graphical Data
As the following example shows, it is easy to read binary data into a blob variable with the FILE.TO_BLOB() method.
dim png_data as B png_data = file.to_blob("c:\documents\Xbasic Reference\Images\toucan.png")
Creating a Bitmap in Memory
One way to create a bitmap is to use the UI_BITMAP_LOAD() function to extract graphical data from a blob variable. This example creates a bitmap in memory named "test1". This bitmap is implicitly sized by its content data.
ui_bitmap_load("test1", png_data)
Another way to create is bitmap is to use the UI_BITMAP_CREATE() function to create a blank "slate" of a particular size. This example creates a bitmap in memory named "test2" that is 4 inches wide and 1 inch high.
ui_bitmap_create("test2", 4, 1)
Or you might grab a piece of the screen image with the UI_BITMAP_CREATE_FROM_SCREEN() function. The following example captured a 4 by 2 inch rectangle from the upper left corner of the screen.
ui_bitmap_create_from_screen("test3", 0, 0, 4, 2)
Modifying and Displaying the Bitmap
The are a large number of Graphic Functions that you may use to modify the bitmap image. These functions are embedded into the Code section of the UI_BITMAP_DRAW() function.
ui_bitmap_create("test", 4, 1) ui_bitmap_draw("test",<<%code% set_font("Verdana,10,b", "black", "green") set_brush("green") inner_Rect(0, 0, 1.3, 1) set_brush("red") inner_Rect(1.3, 0, .1, 1) set_brush("Lavendar") inner_Rect(1.4, 0, 2.6, 1) text("Art by Edward", .65, .5, "center") %code%) ui_dlg_box("", "{image=test}") ui_bitmap_drop("test")
Printing the Bitmap
If you were going to print this lovely image, the code would look like this. First, dim the variables and define the bitmap in a variable named page_description, which contains the same Code section included in the UI_BITMAP_DRAW() function.
dim page_description as C dim program_name as C dim printer as C page_description = <<%code% set_font("Verdana,10,b", "black", "green") set_brush("green") inner_Rect(0, 0, 1.3, 1) set_brush("red") inner_Rect(1.3, 0, .1, 1) set_brush("Lavendar") inner_Rect(1.4, 0, 2.6, 1) text("Art by Edward", .65, .5, "center") %code%
Now, print the bitmap using the UI_PRINTER_DRAW() function:
printer = "Acrobat Distiller" program_name = "C:\Program Files\Adobe\Acrobat 5.0\Distillr\AcroDist.exe" ui_printer_draw(printer, "please wait", "c:\distiller.ps", page_description) if (file.exists("c:\distiller.pdf")) then file.remove("c:\distiller.pdf") end if cmd = program_name + " c:\distiller.ps" sys_shell(cmd) wait_until(file.exists("c:\distiller.pdf"), 1, 10)
Saving a Bitmap
The following example creates and saves this picture to a file.
dim pretty_picture as B dim ptr as P ui_bitmap_create("test", 4, 1) ui_bitmap_draw("test",<<%code% set_font("Verdana,10,b", "black", "green") set_brush("green") inner_Rect(0, 0, 1.3, 1) set_brush("red") inner_Rect(1.3, 0, .1, 1) set_brush("Lavendar") inner_Rect(1.4, 0, 2.6, 1) text("Art by Edward", .65, .5, "center") %code%) pretty_picture = ui_bitmap_save("test") ptr = file.create("c:\pretty_picture.bmp", FILE_RW_EXCLUSIVE) ptr.writeb(pretty_picture) ptr.close() ui_bitmap_drop("test")
Interactive Window
These functions may be tested in the Interactive window. For example:
' turn on graphics mode mode graphics ' draw a rectangle fill_rect(1, .5, 3, 2) ' draw a line line(1.1, 2, 2, 2.5) ' turn off graphics mode mode text
See Also